﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Drawing.Imaging;

public partial class CapCha : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        const string FORM_STYLE = "Arial Black"; // Form chữ 
        const int WIDTH = 70; // chiều dài hộp xác nhận
        const int HEIGHT = 27; // chiều cao hộp xác nhận
        const byte LENGTH = 3; // lượng kí tự cần hiển thị
        // thiết định miền kí tự cần lấy vào hộp xác nhận
        const string chars = "0123456789";
        using (Bitmap bmp = new Bitmap(WIDTH, HEIGHT))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                // Tạo nền cho ảnh dạng sóng
                HatchBrush brush = new HatchBrush(HatchStyle.Wave, Color.White, Color.Wheat);
                g.FillRegion(brush, g.Clip);
                // Lưu chuỗi captcha trong quá trình tạo
                StringBuilder strCaptcha = new StringBuilder();
                Random rand = new Random();
                for (int i = 0; i < LENGTH; i++)
                {
                    // Lấy kí tự ngẫu nhiên từ mảng chars
                    string str = chars[rand.Next(chars.Length)].ToString();
                    strCaptcha.Append(str);
                    // Tạo font chữ 
                    Font font = new Font(FORM_STYLE, 12, FontStyle.Italic);
                    // Lấy kích thước của kí tự
                    SizeF size = g.MeasureString(str, font);
                    // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                    g.DrawString(str, font,
                    Brushes.DarkRed, i * size.Width, rand.Next(2, 7));
                    font.Dispose();
                }
                // Lưu captcha vào session
                Session[HangSo.CAPCHA] = strCaptcha.ToString();
                // Ghi ảnh trực tiếp ra luồng xuất theo định dạng gif
                Response.ContentType = "image/GIF";
                bmp.Save(Response.OutputStream, ImageFormat.Gif);
            }
        }
    }
}
